<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

require_once 'Zend/Form.php';
require_once 'Zend/Form/Element/Select.php';
require_once 'Zend/Form/Element/Text.php';
require_once 'Zend/Form/Element/Button.php';
require_once 'Zend/Validate/Alpha.php';
require_once 'Zend/Validate/Digits.php';
require_once 'Zend/Validate/Regex.php';
require_once 'Zend/Validate/EmailAddress.php';

require_once dirname(dirname(__FILE__)) . '/models/Single/LocalidadEntity.php';
require_once dirname(dirname(__FILE__)) . '/models/Single/TipoDocumentoEntity.php';
require_once dirname(dirname(__FILE__)) . '/models/Single/ClienteEntity.php';

/**
 * Description of NuevoCliente
 *
 * @author kristian
 */
class NuevoClienteForm extends Zend_Form{
    private $tiposDoc;
    private $localidades;
    private $readOnly;

    public function NuevoClienteForm(Spalm_Model_Single_ClienteEntity $cliente = null, $editar = false){
        // obtiene la lista de tipos de documentos y localidades
        $tiposDocModel = new Spalm_Model_Single_TipoDocumentoEntity();
        $arregloTiposDoc = $tiposDocModel->fetchAll();

        $localidadesModel = new Spalm_Model_Single_LocalidadEntity();
        $arregloLocalidades = $localidadesModel->fetchAll();

        foreach ($arregloTiposDoc as $tipoDoc) {
            $tipoDocPk = $tipoDoc->getPK();
            $tipoDocSigla = $tipoDoc->getSigla();

            $this->tiposDoc[] = array("$tipoDocPk" => "$tipoDocSigla");
        }

        foreach ($arregloLocalidades as $localidad) {
            $localidadPk = $localidad->getPK();
            $localidadNombre = $localidad->getNombre();

            $this->localidades[] = array("$localidadPk" => "$localidadNombre");
        }

        $this->readOnly = "false";
                    // si se quiere editar
            $this->readOnly = ($editar && $cliente !== null) ? "false" : "true";


        //  elementos

        // Setup form
        $this->setName('Nuevo Cliente');
        //$this->setAction($this->getView()->url())->setMethod('post');
        $this->addAttribs(array('onSubmit'=>'return validate(this)'));

        /*
         * elemento con su validador
         */

        $nombre = $this->createElement(
            'Text',
            'razonSocial',
            array(
                'label' => 'Razon Social: ',
                'filters' => array('StringTrim'),
                'propercase' => 'true',
                'required' => 'true',
                'readonly' => $this->readOnly
            )
        );

        $valNombre = new Zend_Validate_Alpha();
        $valNombre->setAllowWhiteSpace(true);
        $valNombre->setMessage('No es un nombre válido');

        $nombre->addValidator($valNombre);

        /*
         * elemento
         */

        $tipos = $this->createElement(
            'Select',
            'tipoDocumento',
            array(
                'label'        => 'Tipo de documento: ',
                'value'        => $tiposDoc[0],
                'autocomplete' => true,
                'multiOptions' => $tiposDoc,
                'required' => 'true'
            )
        );

        /*
         * elemento con su validador
         */

        $documento = $this->createElement(
            'Text',
            'nroDocumento',
            array(
                'value' => '',
                'label' => 'Numero de documento: ',
                'filters' => array('StringTrim'),
                'propercase' => 'true',
                'required' => 'true',
                'readonly' => $this->readOnly
            )
        );

        $valDocumento = new Zend_Validate_Regex();
        $valDocumento->setPattern('[0-9]{11}');
        $valDocumento->setMessage('El número de documento no es valido');

        $documento->addValidator($valDocumento);

        /*
         * elemento
         */

        $ciudades = $this->createElement(
            'Select',
            'localidad',
            array(
                'label'        => 'Localidad: ',
                'value'        => $localidades[0],
                'autocomplete' => true,
                'multiOptions' => $localidades,
                'required' => 'true'
            )
        );

        /*
         * elemento con su validador
         */

        $domicilio = $this->createElement(
            'Text',
            'domicilio',
            array(
                'value' => '',
                'label' => 'Domicilio: ',
                'filters' => array('StringTrim'),
                'propercase' => 'true',
                'required' => 'true',
                'readonly' => $this->readOnly
            )
        );

        $valDomicilio = new Zend_Validate_Regex();
        $valDomicilio->setPattern('[A-Z]{1}[a-z]*[ ]{1}[0-9]+');
        $valDomicilio->setMessage('No es un domicilio válido. Ingrese calle y altura');

        $domicilio->addValidator($valDomicilio);

        /*
         * elemento con su validador
         */

        $telefono = $this->createElement(
            'Text',
            'nroTelefono',
            array(
                'value' => '',
                'label' => 'Numero de telefono: ',
                'filters' => array('StringTrim'),
                'propercase' => 'true',
                'readonly' => $this->readOnly
            )
        );

        $valTelefono = new Zend_Validate_Digits();
        $valTelefono->setMessage('No es un número de teléfono válido');

        $telefono->addValidator($valTelefono);

        /*
         * elemento con su validador
         */

        $email = $this->createElement(
            'Text',
            'email',
            array(
                'label' => 'Correo electronico: ',
                'filters' => array('StringTrim'),
                'propercase' => 'true',
                'readonly' => $this->readOnly
            )
        );

        $valEmail = new Zend_Validate_EmailAddress();
        $valEmail->setMessage('No es una dirección de correo válida');

        $email->addValidator($valEmail);

        /*
         * elemento
         */

        $submit = $this->createElement(
            'SubmitButton',
            'submit',
            array(
                'required' => 'false',
                'ignore' => 'true',
                'label' => 'Agregar'
            )
        );

        $this->addElements(array(
                $nombre,
                $tipos,
                $documento,
                $ciudades,
                $domicilio,
                $telefono,
                $email,
                $submit
        )
        );


        #########################



        // si se quiere mostrar
        if ($cliente !== null){

            $nombre->setValue($cliente->getRazonSocial());
            $tipos->setValue($cliente->getLocalidad()->getNombre());
            $documento->setValue($cliente->getNumeroDocumento());
            $ciudades->setValue($cliente->getLocalidad()->getNombre());
            $domicilio->setValue($cliente->getDomicilio());
            $telefono->setValue($cliente->getNroTelefono());
            $email->setValue($cliente->getEmail());
        }
    }

    public function init() {
//        $tiposDoc = array(
//            'doc1' => 'CUIT',
//            'doc2' => 'DNI',
//             'doc3' => 'LE'
//        );
//        $localidades = array(
//            'ciudad1' => 'Puerto Madryn',
//            'ciudad2' => 'Trelew',
//            'ciudad3' => 'Comodoro Rivadavia',
//            'ciudad4' => 'Esquel'
//        );

        

        // Setup form
//        $this->setName('Nuevo Cliente');
//        $this->setAction($this->getView()->url())->setMethod('post');
//        $this->addAttribs(array('onSubmit'=>'return validate(this)'));
//
//        $nombre = $this->createElement(
//            'ValidationTextBox',
//            'razonSocial',
//            array(
//                'value' => '',
//                'label' => 'Razon Social: ',
//                'trim' => 'true',
//                'propercase' => 'true',
//                'required' => 'true',
//                'regExp' => '([A-Z][a-z]*[ ])+',
//                'InvalidMessage' => 'No es un nombre válido',
//                'readonly' => $this->readOnly
//            )
//        );
//
//        $tipos = $this->createElement(
//            'FilteringSelect',
//            'tipoDocumento',
//            array(
//                'label'        => 'Tipo de documento: ',
//                'value'        => $tiposDoc[0],
//                'autocomplete' => true,
//                'multiOptions' => $tiposDoc,
//                'required' => 'true'
//            )
//        );
//
//
//        $documento = $this->createElement(
//            'ValidationTextBox',
//            'nroDocumento',
//            array(
//                'value' => '',
//                'label' => 'Numero de documento: ',
//                'trim' => 'true',
//                'propercase' => 'true',
//                'regExp' => '[0-9]{11}',
//                'required' => 'true',
//                'InvalidMessage' => 'El número de documento no es valido',
//                'readonly' => $this->readOnly
//            )
//        );
//
//        $ciudades = $this->createElement(
//            'FilteringSelect',
//            'localidad',
//            array(
//                'label'        => 'Localidad: ',
//                'value'        => $localidades[0],
//                'autocomplete' => true,
//                'multiOptions' => $localidades,
//                'required' => 'true'
//            )
//        );
//
//        $domicilio = $this->createElement(
//            'ValidationTextBox',
//            'domicilio',
//            array(
//                'value' => '',
//                'label' => 'Domicilio: ',
//                'trim' => 'true',
//                'propercase' => 'true',
//                'required' => 'true',
//                'regExp' => '[A-Z]{1}[a-z]*[ ]{1}[0-9]+',
//                'InvalidMessage' => 'No es un domicilio válido. Ingrese calle y altura',
//                'readonly' => $this->readOnly
//            )
//        );
//
//        $telefono = $this->createElement(
//            'ValidationTextBox',
//            'nroTelefono',
//            array(
//                'value' => '',
//                'label' => 'Numero de telefono: ',
//                'trim' => 'true',
//                'propercase' => 'true',
//                'regExp' => '[0-9]{20}',
//                'InvalidMessage' => 'No es un número de teléfono válido',
//                'readonly' => $this->readOnly
//            )
//        );
//
//        $email = $this->createElement(
//            'ValidationTextBox',
//            'email',
//            array(
//                'value' => '',
//                'label' => 'Correo electronico: ',
//                'trim' => 'true',
//                'propercase' => 'true',
//                'regExp' => '[a-z]+@[a-z].[a-z]{3}',
//                'readonly' => $this->readOnly
//            )
//        );
//
//        $submit = $this->createElement(
//            'SubmitButton',
//            'submit',
//            array(
//                'required' => 'false',
//                'ignore' => 'true',
//                'label' => 'Agregar'
//            )
//        );
//
//        $this->addElements(array(
//                $nombre,
//                $tipos,
//                $documento,
//                $ciudades,
//                $domicilio,
//                $telefono,
//                $email,
//                $submit
//        )
//        );
//
//        $this->render($this->getView());
    }
}
?>
